Skip to content

Add proxyless endpoint on-demand allocation#17851

Merged
danegsta merged 10 commits into
mainfrom
danegsta/proxyless-port-fallback
Jun 2, 2026
Merged

Add proxyless endpoint on-demand allocation#17851
danegsta merged 10 commits into
mainfrom
danegsta/proxyless-port-fallback

Conversation

@danegsta

@danegsta danegsta commented Jun 2, 2026

Copy link
Copy Markdown
Member

Description

Proxyless container endpoints without an explicit host port normally defer host port assignment until DCP creates the container. That can deadlock or fail when an endpoint reference needs the allocated endpoint while container configuration is still being built, such as when a container exposes its own public port in an environment variable.

This change adds an on-demand allocation path for dynamic proxyless container endpoints. If an allocated endpoint is requested before container ports are finalized, Aspire commits the target port as the fallback host port and builds the container port spec with that host port. Once BuildContainerPorts runs, the on-demand allocator is disabled so any later endpoint resolution is fulfilled by normal DCP service updates, preserving random host-port assignment when the endpoint was not needed before container creation.

User-facing usage

AppHost code that references a proxyless container endpoint before the container is created can now resolve that endpoint deterministically:

var database = builder.AddContainer("database", "image")
    .WithEndpoint(name: "tcp", targetPort: 5432, isProxied: false);

database.WithEnvironment("PUBLIC_PORT", database.GetEndpoint("tcp").Property(EndpointProperty.Port));

If the endpoint is not resolved before container creation, DCP still assigns the host port dynamically.

Validation:

  • dotnet test --project tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-launch-profile -- --filter-method "*.EndpointPortsContainerProxylessNoPortTargetPortSet" --filter-method "*.EndpointPortsContainerProxylessNoPortTargetPortSetPublishesAllocatedEndpointAfterServiceUpdate" --filter-method "*.EndpointPortsContainerProxylessNoPortTargetPortSetUsesTargetPortFallbackWhenResolvedBeforeContainerCreation" --filter-method "*.EndpointPortsContainerProxylessNoPortTargetPortSetUsesTargetPortFallbackWhenHostAndPortResolvedBeforeContainerCreation" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

Fixes # (issue)

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Allow dynamic proxyless container endpoints to allocate a target-port fallback when an endpoint reference requires an allocated endpoint before container creation. Disable the on-demand allocator once container ports are built so later resolution continues to use DCP service updates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17851

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17851"

danegsta and others added 8 commits June 2, 2026 14:08
Log when a dynamic proxyless container endpoint is resolved before container creation and Aspire assigns the public port to match the target port.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the endpoint allocation cutoff lock with an atomic exchange so BuildContainerPorts remains the point where on-demand proxyless endpoint allocation stops.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the atomic OnDemandAllocatedEndpointProvider setter directly at the BuildContainerPorts cutoff instead of a dedicated clear wrapper.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@danegsta

danegsta commented Jun 2, 2026

Copy link
Copy Markdown
Member Author

PR Testing Report

PR Information

CLI Version Verification

  • Expected Commit: ba37495
  • Installed Version: 13.5.0-pr.17851.gba37495f
  • Status: ✅ Verified; installed CLI version includes PR head short SHA ba37495f.

Changes Analyzed

Files Changed

  • src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs
  • src/Aspire.Hosting/ApplicationModel/EndpointReference.cs
  • src/Aspire.Hosting/ApplicationModel/OnDemandEndpointAllocationAnnotation.cs
  • src/Aspire.Hosting/Dcp/ContainerCreator.cs
  • src/Aspire.Hosting/Dcp/DcpModelUtilities.cs
  • tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs
  • tests/Aspire.Hosting.Tests/Dcp/TestKubernetesService.cs

Change Categories

  • CLI changes detected
  • Hosting changes detected
  • Dashboard changes detected
  • Template changes detected
  • Client/Component changes detected
  • Test changes detected

Test Scenarios Executed

Scenario 1: Late allocation remains dynamic

Objective: Verify a proxyless container endpoint with a target port but no host port keeps DCP-owned dynamic host-port assignment when no endpoint reference is resolved before container creation.
Coverage Type: Happy path and no-fallback-after-cutoff boundary
Status: ✅ Passed

Steps:

  1. Installed the PR dogfood CLI into an isolated temp directory.
  2. Created a fresh file-based Aspire AppHost with aspire new aspire-empty.
  3. Added an nginx:alpine container with WithEndpoint(name: "http", targetPort: 18080, isProxied: false).
  4. Started the AppHost with aspire start --isolated.
  5. Waited for the web resource to be up.
  6. Captured aspire describe --format Json.

Evidence:

  • AppHost: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/late-allocation/LateAllocationApp/apphost.cs
  • Describe output: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/late-allocation/describe.json
  • CLI start output: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/late-allocation/start-output.txt
  • Resource logs: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/late-allocation/logs.txt

Observations:

  • Target/container port was 18080.
  • Published endpoint URL used DCP-assigned host port 53997.
  • The host port did not get forced to the target port after startup, validating the post-cutoff behavior.

Expected Unhappy-Path Outcome: Post-start endpoint resolution should not retroactively force the target-port fallback. This was satisfied because the described URL remained on host port 53997 instead of 18080.


Scenario 2: Early endpoint resolution uses target-port fallback

Objective: Verify resolving a proxyless container endpoint during container configuration commits the public port to the target port before container creation.
Coverage Type: Happy path
Status: ✅ Passed

Steps:

  1. Created a fresh file-based Aspire AppHost with aspire new aspire-empty.
  2. Added an nginx:alpine container with WithEndpoint(name: "http", targetPort: 28697, isProxied: false).
  3. Added environment variables that resolve EndpointProperty.Port and EndpointProperty.HostAndPort before container creation.
  4. Started the AppHost with aspire start --isolated.
  5. Waited for the web resource to be up.
  6. Captured aspire describe --format Json and the detached AppHost log.

Evidence:

  • AppHost: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/early-fallback/EarlyFallbackApp/apphost.cs
  • Describe output: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/early-fallback/describe.json
  • Detached AppHost log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/early-fallback/apphost-log.txt
  • CLI start output: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/early-fallback/start-output.txt

Observations:

  • Target port was 28697.
  • PUBLIC_PORT resolved to 28697.
  • PUBLIC_HOST_AND_PORT resolved to web.dev.internal:28697.
  • The AppHost log included the informational message explaining that Aspire assigned the public port to match the target port because the endpoint was resolved before container creation.

Scenario 3: Repeated early resolution is stable

Objective: Verify multiple early resolutions of the same endpoint do not produce conflicting fallback values.
Coverage Type: Boundary
Status: ✅ Passed

Steps:

  1. Used the same fresh AppHost as Scenario 2.
  2. Resolved EndpointProperty.Port twice into PUBLIC_PORT and PUBLIC_PORT_AGAIN during configuration.
  3. Captured the container environment from aspire describe --format Json.

Evidence:

  • Describe output: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.wB4nqrnqiY/scenarios/early-fallback/describe.json

Observations:

  • PUBLIC_PORT and PUBLIC_PORT_AGAIN both resolved to 28697.
  • No conflicting allocation was observed.

Summary

Scenario Status Notes
Late allocation remains dynamic ✅ Passed DCP assigned host port 53997, not target port 18080.
Early endpoint resolution uses target-port fallback ✅ Passed Early public port resolved to target port 28697.
Repeated early resolution is stable ✅ Passed Repeated port references both resolved to 28697.

Overall Result

✅ PR VERIFIED

The dogfood CLI for PR #17851 matches the PR head commit, and the targeted proxyless container endpoint scenarios passed.

@danegsta danegsta marked this pull request as ready for review June 2, 2026 23:31
Copilot AI review requested due to automatic review settings June 2, 2026 23:31
@danegsta

danegsta commented Jun 2, 2026

Copy link
Copy Markdown
Member Author

/backport to release/13.4

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Started backporting to release/13.4 (link to workflow run)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds an on-demand allocation path for dynamic, proxyless container endpoints so endpoint references can be resolved deterministically before the container is created (avoiding deadlocks when container configuration/env-var callbacks require the port).

Changes:

  • Introduces an internal on-demand endpoint allocation annotation and integrates it into endpoint resolution.
  • Adjusts container creation ordering so environment/configuration callbacks can trigger early (fallback) host-port commitment before container ports are finalized.
  • Expands DCP executor tests and DCP test Kubernetes service behavior to validate both “resolved early” and “resolved after service update” scenarios.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tests/Aspire.Hosting.Tests/Dcp/TestKubernetesService.cs Updates the fake DCP service-port allocation to prefer container host-port when present for proxyless endpoints.
tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs Adds coverage for early endpoint resolution fallback behavior and verifies port publishing semantics.
src/Aspire.Hosting/Dcp/DcpModelUtilities.cs Adds on-demand allocation wiring for dynamic proxyless container endpoints and supports fallback port usage when allocating localhost endpoints.
src/Aspire.Hosting/Dcp/ContainerCreator.cs Reorders container port building to occur after configuration/env callbacks and disables on-demand allocation after callbacks complete.
src/Aspire.Hosting/ApplicationModel/OnDemandEndpointAllocationAnnotation.cs New internal annotation that provides a stoppable, resource-owned allocator hook.
src/Aspire.Hosting/ApplicationModel/EndpointReference.cs Adds internal async allocation helper that consults on-demand allocators before awaiting normal allocation snapshots.
src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs Adds a helper to synchronously read an already-set allocated endpoint for a given network.

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

CLI E2E Tests failed — 109 passed, 1 failed, 2 unknown (commit ba37495)

❌ Failed Tests

- Test Detail
DeployK8sWithGarnet Recording · Job · CLI logs
View all recordings
- Test Detail
AddPackageInteractiveWhileAppHostRunningDetached Recording · Job · CLI logs
AddPackageWhileAppHostRunningDetached Recording · Job · CLI logs
AgentCommands_AllHelpOutputs_AreCorrect Recording · Job · CLI logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording · Job · CLI logs
AgentInitCommand_MigratesDeprecatedConfig Recording · Job · CLI logs
AgentInit_NonInteractive_BundleOnlySkillsNotInCatalog Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording · Job · CLI logs
AllPublishMethodsBuildDockerImages Recording · Job · CLI logs
AspireAddAndStartWorkAgainstLegacyAppHostTs Recording · Job · CLI logs
AspireAddPackageVersionToDirectoryPackagesProps Recording · Job · CLI logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording · Job · CLI logs
AspireInit_ExistingAppHostDir_RecreatesNuGetConfigKeepsFiles Recording · Job · CLI logs
AspireInit_SolutionFile_BuildsAgainstChannelHive Recording · Job · CLI logs
AspireStartUpdatesStaleTypeScriptAppHostPath Recording · Job · CLI logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording · Job · CLI logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording · Job · CLI logs
Banner_DisplayedOnFirstRun Recording · Job · CLI logs
Banner_DisplayedWithExplicitFlag Recording · Job · CLI logs
Banner_NotDisplayedWithNoLogoFlag Recording · Job · CLI logs
CertificatesClean_RemovesCertificates Recording · Job · CLI logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording · Job · CLI logs
CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording · Job · CLI logs
ConfigSetGet_CreatesNestedJsonFormat Recording · Job · CLI logs
CreateAndRunAspireStarterProject Recording · Job · CLI logs
CreateAndRunAspireStarterProjectWithBundle Recording · Job · CLI logs
CreateAndRunEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJavaEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJsReactProject Recording · Job · CLI logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrls Recording · Job · CLI logs
CreateAndRunPythonReactProject Recording · Job · CLI logs
CreateAndRunTypeScriptEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunTypeScriptStarterProject Recording · Job · CLI logs
CreateJavaAppHostWithViteApp Recording · Job · CLI logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DeployK8sBasicApiService Recording · Job · CLI logs
DeployK8sWithExternalHelmChart Recording · Job · CLI logs
DeployK8sWithGarnet Recording · Job · CLI logs
DeployK8sWithMongoDB Recording · Job · CLI logs
DeployK8sWithMySql Recording · Job · CLI logs
DeployK8sWithPostgres Recording · Job · CLI logs
DeployK8sWithRabbitMQ Recording · Job · CLI logs
DeployK8sWithRedis Recording · Job · CLI logs
DeployK8sWithSqlServer Recording · Job · CLI logs
DeployK8sWithValkey Recording · Job · CLI logs
DeployTypeScriptAppToKubernetes Recording · Job · CLI logs
DescribeCommandResolvesReplicaNames Recording · Job · CLI logs
DescribeCommandShowsRunningResources Recording · Job · CLI logs
DetachFormatJsonProducesValidJson Recording · Job · CLI logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording · Job · CLI logs
DoPublishAndDeployListStepsWork Recording · Job · CLI logs
DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording · Job · CLI logs
DoctorCommand_DetectsDeprecatedAgentConfig Recording · Job · CLI logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording · Job · CLI logs
DoctorCommand_WithSslCertDir_ShowsTrusted Recording · Job · CLI logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording · Job · CLI logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording · Job · CLI logs
GlobalMigration_HandlesCommentsAndTrailingCommas Recording · Job · CLI logs
GlobalMigration_HandlesMalformedLegacyJson Recording · Job · CLI logs
GlobalMigration_PreservesAllValueTypes Recording · Job · CLI logs
GlobalMigration_SkipsWhenNewConfigExists Recording · Job · CLI logs
GlobalSettings_MigratedFromLegacyFormat Recording · Job · CLI logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording · Job · CLI logs
InteractiveCSharpInitCreatesExpectedFiles Recording · Job · CLI logs
InvalidAppHostPathWithComments_IsHealedOnRun Recording · Job · CLI logs
JavaScriptHostingApisRunFromTypeScriptAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelTypeScriptAppHost Recording · Job · CLI logs
LegacySettingsMigration_AdjustsRelativeAppHostPath Recording · Job · CLI logs
LogsCommandShowsResourceLogs Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterApp Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording · Job · CLI logs
PsCommandListsRunningAppHost Recording · Job · CLI logs
PsFormatJsonOutputsOnlyJsonToStdout Recording · Job · CLI logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording · Job · CLI logs
PublishWithConfigureEnvFileUpdatesEnvOutput Recording · Job · CLI logs
PublishWithDockerComposeServiceCallbackSucceeds Recording · Job · CLI logs
PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording · Job · CLI logs
ResourceCommand_FailedExec_ShowsLogPathAndLogHasEntries Recording · Job · CLI logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording · Job · CLI logs
RestoreGeneratesSdkFiles Recording · Job · CLI logs
RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording · Job · CLI logs
RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording · Job · CLI logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording · Job · CLI logs
RunFromParentDirectory_UsesExistingConfigNearAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
SecretCrudOnDotNetAppHost Recording · Job · CLI logs
SecretCrudOnTypeScriptAppHost Recording · Job · CLI logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording · Job · CLI logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording · Job · CLI logs
StartReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
StartReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
StopAllAppHostsFromAppHostDirectory Recording · Job · CLI logs
StopJavaPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopNonInteractiveSingleAppHost Recording · Job · CLI logs
StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopWithNoRunningAppHostExitsSuccessfully Recording · Job · CLI logs
TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallback Recording · Job · CLI logs
TypeScriptAppHostWithVite_AllowsDifferentGuestPkgManager Recording · Job · CLI logs
UnAwaitedChainsCompileWithAutoResolvePromises Recording · Job · CLI logs
UpdateToStable_CSharpEmptyAppHost_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_CSharpSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScriptSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScript_PreviewsStablePkgsAndKeepsChannel Recording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #26851923598

@danegsta danegsta merged commit b178f82 into main Jun 2, 2026
658 of 662 checks passed
@danegsta danegsta deleted the danegsta/proxyless-port-fallback branch June 2, 2026 23:55
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.5 milestone Jun 2, 2026
aspire-repo-bot Bot added a commit to microsoft/aspire.dev that referenced this pull request Jun 3, 2026
Documents the on-demand port allocation behavior for dynamic proxyless
container endpoints introduced in Aspire 13.5 (microsoft/aspire#17851).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1199

Generated by PR Documentation Check · sonnet46 3.3M

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1199 targeting release/13.4.

Added a new subsection "Resolving proxyless container endpoints before container creation" to src/frontend/src/content/docs/fundamentals/networking-overview.mdx documenting the on-demand port allocation behavior for dynamic proxyless container endpoints introduced in this PR. The section explains the deadlock scenario, describes how Aspire 13.5 commits the targetPort as a fallback host port when an endpoint is resolved before container creation, and includes the C# example from the PR body.

Note

This draft PR needs human review before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants